﻿/*-----------------------------------------------------------------------
 * <copyright file="WCFAccounts.svc.cs" company="O-RID">
 *     Copyright (c)2010 O-RID Co.,Ltd.
 * </copyright>
 * <author>Zhang Jun</author>
 * <summary>
 *          IWCFAccounts服务接口的实现
 *          StatisticsToolsDB 数据库
 *          作成日：05/21/2010
 *                  08/03/2010 增加 取客户端IP地址
 *                  08/27/2010 增加 查询SV、SSV 对应的组别信息，或是查询某组由那些SV来管理 信息
 *                  09/06/2010 增加 设置TreeView权限树
 *                  09/07/2010 增加 显示所有的Roles，对Roles进行 增删改
 *                  09/19/2010 增加 查询已有用户
 *                  09/20/2010 增加 添加新增用户(权限管理方面)
 *                  10/25/2010 增加 【SV管理页面】 查找已/未分组的SV或SSV信息
 *                  10/28/2010 -- 10/29/2010 
 *                             增加 【SV管理页面】添加组信息、删除组信息
 *                  
 * </summary>
 *-----------------------------------------------------------------------
 */

namespace Orid.Management.Statistics.Service.OPUnitService.Account
{
    using System;
    using System.Collections.Generic;
    using System.ServiceModel;
    using System.ServiceModel.Activation;
    using Orid.Management.Statistics.Service.OPUnitService.Account.ServiceModel;

    /// <summary>
    /// 注意: 如果更改此处的类名 "WCFAccounts"，也必须更新 Web.config 中对 "WCFAccounts" 的引用。
    /// </summary>
    [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class WCFAccounts : IWCFAccounts
    {
        #region  用户登录
        /// <summary>
        /// Login 
        /// 用户登录
        /// </summary>
        /// <param name="loginName"> loginName 用户ID </param>
        /// <param name="password"> password 用户密码 </param>
        /// <returns>返回用户的基本信息，和管理权限 LoginDataList</returns>
        public LoginDataList Login(string loginName, string password)
        {
            LoginDataList loginUser = null;

            try
            {
                if (string.IsNullOrEmpty(loginName) || string.IsNullOrEmpty(password)) 
                {
                    throw new Exception("OPUnitManagement - WCFAccounts - Login方法 - 输入参数有空值");
                }

                // 返回当前用户是否可登录
                loginUser = DataProvider.VerifyAccount(loginName, password);
                if (!String.IsNullOrEmpty(loginUser.AccountID))
                {
                    // 取得当前可登录用户管理权限
                    loginUser = DataProvider.GetUserRoles(loginUser);
                }
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account Login Error:" + ex.Message);
            }

            return loginUser;
        }

        #endregion

        #region 登录账号管理 显示当前可登录的信息
        /// <summary>
        /// 账号 管理
        /// 显示 当前可登录的信息
        /// AccountManagementPage页面载入时，
        /// DataGrid使用
        /// </summary>
        /// <returns>返回 AccountManagementDataList 的 LIST 形式</returns>
        public List<AccountInforBase> AccountManagement()
        {
            try
            {
                return DataProvider.GetAccountManagementList();
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account AccountManagement Error:" + ex.Message);
            }

            return null;
        }

        #endregion 登录账号管理 显示当前可登录的信息

        #region 登录账号管理 显示所有用户的信息（可登录和不可登录）
        /// <summary>
        /// 账号 管理
        /// 显示所有可登录的信息
        /// AccountManagementPage页面，在点击增加按钮时，
        /// 在弹出的窗体上的DataGrid上使用。
        /// </summary>
        /// <param name="userName"> userName 用户ID </param>
        /// <returns> 返回 AccountManagementDataList 的 LIST 形式</returns>
        public List<AccountInforBase> AccountManagementAll(string userName)
        {
            try
            {
                if (string.IsNullOrEmpty(userName)) 
                {
                    throw new Exception("OPUnitManagement - WCFAccounts - AccountManagementAll方法 - 输入参数有空值");
                }

                return DataProvider.GetAccountsAllList(userName);
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account AccountManagementAll Error:" + ex.Message);
            }

            return null;
        }

        #endregion 登录账号管理 显示所有用户的信息（可登录和不可登录）

        #region 登录账号管理 将加入到列表中的项目加入表中， 并更新（添加可登录用户）
        /// <summary>
        /// InsertAccount
        /// 账号管理
        /// 将列表中的项目加入表中，并更新（设置可登录用户）
        /// AccountManagementListShowChild页面
        /// </summary>
        /// <param name="haveName">有真实名字的用户记录</param>
        /// <param name="haveNoName">没有真实字的用户记录</param>
        /// <returns>返回 AccountManagementDataList 的 LIST 形式</returns>
        /// <value>11/17/2010 - 11/18/2010 Edition 重新设置方法参数</value>
        public List<AccountInforBase> InsertAccount(List<string> haveName, List<string> haveNoName)
        {
            try
            {
                // 有名字的用户记录
                if (haveName.Count > 0)
                {
                    foreach (string account in haveName)
                    {
                        // 加入表中
                        DataProvider.GetInsertAccount(account, false);
                    }
                }
                // 没有名字的用户记录
                if (haveNoName.Count > 0)
                {
                    foreach (string account in haveNoName)
                    {
                        // 加入表中
                        DataProvider.GetInsertAccount(account, true);
                    }
                }

                // 返回所有可登录的信息
                return DataProvider.GetAccountManagementList();
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account InsertAccount Error:" + ex.Message);
            }

            return null;
        }

        #endregion 登录账号管理 将加入到列表中的项目加入表中， 并更新（添加可登录用户）

        #region  登录账号管理 删除用户，并更新
        /// <summary>
        /// 删除用户，并更新
        /// 账号 管理
        /// AccountManagementListShowChild页面
        /// </summary>
        /// <param name="accountList">想要 删除的用户名称列表</param>
        /// <returns>返回 AccountManagementDataList 的 LIST 形式</returns>
        public List<AccountInforBase> DeleteAccount(List<string> accountList)
        {
            try
            {
                if (accountList.Count <= 0)
                {
                    throw new Exception("OPUnitManagement - WCFAccounts - DeleteAccount方法 - 输入参数有空值");
                }

                foreach (string account in accountList)
                {
                    DataProvider.GetDeleteAccount(account);
                }

                return DataProvider.GetAccountManagementList();
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account DeleteAccount Error:" + ex.Message);
            }

            return null;
        }

        #endregion  登录账号管理 删除用户，并更新

        #region 取得当前登录用的权限列表的内容 TreeView
        /// <summary>
        /// TreeViewList
        /// 取得当前登录用的权限列表的内容
        /// </summary>
        /// <param name="conditionString">conditionString 形成树的条件</param>
        /// <param name="isAnyTree"></param>
        /// <returns>返回 TreeViewDataList 的 LIST 形式</returns>
        public List<TreeViewDataList> TreeViewList(string conditionString, bool isAnyTree)
        {
            try
            {
                if (string.IsNullOrEmpty(conditionString) && isAnyTree == true)
                {
                    throw new Exception("OPUnitManagement - WCFAccounts - TreeViewList方法 - 输入参数有空值");
                }

                return DataProvider.GetTreeViewList(conditionString, isAnyTree);
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account TreeViewList Error:" + ex.Message);
            }

            return null;
        }

        #endregion  取得当前登录用的权限列表的内容

        #region  更新用户的权限列表
        /// <summary>
        /// 更新用户的权限列表
        /// 更新一条数据
        /// 权限分配
        /// </summary>
        /// <param name="accountID"> accountID 用户ID </param>
        /// <param name="roleID"> roleID 权限ID </param>
        public void UpeateOneAccountRoles(string accountID, string roleID)
        {
            try
            {
                if (string.IsNullOrEmpty(accountID) || string.IsNullOrEmpty(roleID)) 
                {
                    throw new Exception("OPUnitManagement - WCFAccounts - UpeateOneAccountRoles方法 - 输入参数有空值");
                }

                DataProvider.SetUpeateOneAccountRoles(accountID, roleID);
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account UpeateOneAccountRoles Error:" + ex.Message);
            }
        }

        #endregion  设置用户的权限列表

        #region 权限分配 显示所有，有登录权限的用户名
        /// <summary>
        /// 权限分配
        /// 显示所有，有权限的用户名
        /// AccountRolesControl.xaml
        /// </summary>
        /// <returns>返回 AccountRolesDataList </returns>
        public List<AccountRolesDataList> AccountRolesList()
        {
            try
            {
                return DataProvider.GetAccountRolesList();
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account AccountRolesList Error:" + ex.Message);
            }

            return null;
        }

        #endregion 权限分配 显示所有，有登录权限的用户名

        #region  现有的所有权限
        /// <summary>
        /// 现有的所有权限
        /// 返回【Roles】的所有记录
        /// </summary>
        /// <returns>返回 RolesCombboxDataList</returns>
        public List<RolesCombboxDataList> RolesList()
        {
            try
            {
                return DataProvider.GetRolesList();
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account RolesList Error:" + ex.Message);
            }

            return null;
        }

        #endregion 现有的所有权限

        #region 获取客户端IP地址
        /// <summary>
        /// 获取客户端IP地址
        /// </summary>
        /// <returns></returns>
        public string IPAddress() 
        {
            try
            {
                return DataProvider.GetIPAddress();
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account IPAddress Error:" + ex.Message);
            }
            return null;
        }
        #endregion 获取客户端IP地址

        #region 对TreeView权限树 增删改
        /// <summary>
        /// 对TreeView权限树 增删改
        /// </summary>
        /// <param name="treeViewNodeList">The tree view node list.</param>
        /// <param name="operateType">Type of the operate.</param>
        /// <returns></returns>
        /// <value>09/06/2010 add</value>
        public string TreeViewNode(TreeViewDataList treeViewNodeList, string operateType) 
        {
            try 
            {
                if (treeViewNodeList == null || string.IsNullOrEmpty(operateType))
                {
                    throw new Exception("输入的参数有空值！");
                }

                return DataProvider.GetTreeViewNode(treeViewNodeList, operateType);
            }
            catch (Exception ex) 
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account TreeViewNode Error:" + ex.Message);
            }
            return null;
        }
        #endregion 对TreeView权限树 增删改

        #region 显示 所有的Roles
        /// <summary>
        /// 显示 所有的Roles
        /// </summary>
        /// <returns>09/07/2010 add</returns>
        public List<RolesCombboxDataList> AllRolesList() 
        {
            try
            {
                return DataProvider.GetAllRolesList();
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account RolesList Error:" + ex.Message);
            }
            return null;
        }
        #endregion 显示 所有的Roles

        #region 对权限进行 增删改
        /// <summary>
        /// 对权限进行 增删改
        /// </summary>
        /// <param name="rolesInfor"></param>
        /// <param name="operateType"></param>
        /// <returns>09/07/2010 add</returns>
        public string EditRolesList(RolesCombboxDataList rolesInfor, string operateType)
        {
            try
            {
                if (rolesInfor == null || string.IsNullOrEmpty(operateType))
                {
                    throw new Exception("输入的参数有空值！");
                }

                return DataProvider.SetEditRolesList(rolesInfor, operateType);
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account EditRolesList Error:" + ex.Message);
            }
            return null;
        }
        #endregion 对权限进行 增删改

        #region 【新增用户子窗体】 查询已有用户
        /// <summary>
        /// 查询已有用户
        /// </summary>
        /// <returns></returns>
        /// <value>09/19/2010 Add</value>
        public List<AccountData> AccountInforList() 
        {
            try
            {
                return DataProvider.GetAccountInforList();
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account AccountInforList Error:" + ex.Message);
            }
            return null;
        }
        #endregion 【新增用户子窗体】 查询已有用户

        #region 【新增用户子窗体】 添加新增用户
        /// <summary>
        /// 添加新增用户
        /// </summary>
        /// <returns></returns>
        /// <value>09/20/2010 Add</value>
        public string InsertNewAccount(List<AccountData> accountList) 
        {
            try
            {
                if (accountList.Count <= 0) 
                {
                    throw new Exception("输入数据有误！");
                }
                return DataProvider.SetInsertNewAccount(accountList);
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account InsertNewAccount Error:" + ex.Message);
            }
            return null;
        }
        #endregion  【新增用户子窗体】 添加新增用户

        #region 【SV管理页面】
        /// <summary>
        /// 查找已/未分组的SV或SSV信息
        /// </summary>
        /// <param name="id">用户ID（模糊查询，值可空）</param>
        /// <param name="isGroup">true: 已分组 False: 末分组</param>
        /// <returns>已/未分组的SV或SSV信息</returns>
        /// <value>10/25/2010 add</value>
        public List<AccountInforBase> SvGroupUnitList(string id, bool isGroup) 
        {
            try
            {
                if (string.IsNullOrEmpty(id)) id = string.Empty;
                return DataProvider.GetGroupUnitList(id.Trim(),isGroup);
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account SvGroupUnitList Error:" + ex.Message);
            }
            return null;
        }

        /// <summary>
        /// 显示SV的详细 分组 信息
        /// </summary>
        /// <param name="id">用户ID</param>
        /// <returns>SV的详细信息</returns>
        /// <value>10/25/2010 add</value>
        public List<AccountData> SvDetailedInfoList(string id) 
        {
            try
            {
                if(string.IsNullOrEmpty(id)) throw new Exception("输入参数不正确");
                return DataProvider.GetSvDetailedInfoList(id.Trim());
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account SvDetailedInfoList Error:" + ex.Message);
            }
            return null;
        }

        /// <summary>
        /// 添加组信息
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <param name="userName">用户姓名</param>
        /// <param name="gruopName">添加的组名</param>
        /// <param name="isGrouped">是否已分组 true:已分组  false: 没分组</param>
        /// <returns></returns>
        /// <value>10/28/2010 add</value>
        public bool SvGroupAdd(string userId, string userName, string gruopName, bool isGrouped)
        {
            try
            {
                if (string.IsNullOrEmpty(userId) || string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(gruopName))
                { 
                    throw new Exception("输入参数有空值！");
                }
                return DataProvider.GetSvGroupAdd(userId.Trim(), userName.Trim(), gruopName.Trim(), isGrouped);
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account SvGroupAdd Error:" + ex.Message);
            }
            return false;
        }

        /// <summary>
        /// 删除组信息
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <param name="userName">用户姓名</param>
        /// <param name="gruopName">要删除的组名</param>
        /// <returns></returns>
        /// <value>10/29/2010 add</value>
        public bool SvGroupDel(string userId, string userName, string gruopName) 
        {
            try 
            {
                if (string.IsNullOrEmpty(userId) || string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(gruopName))
                {
                    throw new Exception("输入参数有空值！");
                }

                //先检查当前用户有多少分组
                int recordNum = DataProvider.GetRemainsOfRecordNumber(userId.Trim(), userName.Trim());

                if (recordNum > 0)
                {
                    //然后再删除
                    return DataProvider.GetSvGroupDel(userId.Trim(), userName.Trim(), gruopName.Trim(), recordNum);
                }
                else 
                {
                    throw new Exception("查询当前用户组信息出现错误！");
                }
            }
            catch (Exception ex) 
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account SvGroupDel Error:" + ex.Message);
            }
            return false;
        }


        /// <summary>
        /// 修改当前用户的真实名字
        /// </summary>
        /// <param name="userId">用户ID.</param>
        /// <param name="userName">用户姓名</param>
        /// <returns></returns>
        /// <value>11/18/2010 Add </value>
        public bool ReName(string userId, string userName) 
        {
            try
            {
                if (string.IsNullOrEmpty(userId) || string.IsNullOrEmpty(userName))
                {
                    throw new Exception("输入参数有空值！");
                }

                return DataProvider.GetReName(userId.Trim(), userName.Trim());
            }
            catch (Exception ex)
            {
                Log4Service.Log log = new Orid.Management.Statistics.Service.Log4Service.Log();
                log.Error("OPUnitService.Account ReName Error:" + ex.Message);
            }
            return false;
        }

        #endregion 【SV管理页面】

    }
}
